﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaDB;


namespace ForrajeriaFRONT.userCtrl
{
    public partial class wusBusqueda : System.Web.UI.UserControl
    {
        #region CLASE GENERICA DE LISTA
       static class geneClass<T>
        {
           public static List<T> generica;

        }
        #endregion

       
        string caller;
        public delegate void RowSelectedHandler(Dictionary<string, string> rowDateSelected);
        public event RowSelectedHandler RowSelected;
       
       
        protected void Page_Load(object sender, EventArgs e)
        {

           
            
        }



        #region CREACION DE GRILLA

        public void initi<T>(List<T> listaGen, String[,] cabecera, string objMO)
        {
            geneClass<T>.generica = listaGen;

         
            caller = objMO; //guardo el tipo de objeto que llamo
            
            if (gridDatos.Columns.Count == 0)
            {
                generarGrilla(cabecera); //genero la grilla 
            }
           gridDatos.DataSource = null;
           if (geneClass<T>.generica.Count > 0)
           {
               gridDatos.DataSource = geneClass<T>.generica;  //seteo la grilla con la lista 
               gridDatos.DataBind();
               gridDatos.SelectedIndex = -1;
               gridDatos.Visible = true;
               lbldatos.Visible = false;
           }
           else
           {
               lbldatos.Visible = true;
               gridDatos.Visible = false;

           }
          
          
                    
        }
     

        private void generarGrilla(String[,] cabecera)
        {
               string[] keys = new string[(cabecera.GetLength(1))]; //creo el array para las keys del gridview 

            
            for (int i = 0; i < cabecera.GetLength(1); i++) //seteo la cabecera
            {
                BoundField columna = new BoundField();
                columna.DataField = cabecera[2, i].ToString();
                columna.HeaderText = "H";
                

                if (cabecera[0, i] != null) //si no es nulo quiere decir q se muestra entonces seteo bien la cabecera
                {

                    columna.HeaderText = " " +cabecera[0, i].ToString() + " " ;
                    
                }

                if (cabecera[1, i] != null)
                {
                    if (cabecera[1, i].ToString() == "1")
                    {
                        columna.Visible = true;


                    }
                    else
                    {
                        columna.Visible = false;
                       
                        
                    

                    }
                }
                else
                {
                    columna.Visible = false;
                    columna.ReadOnly = true;
                   
                }

                keys[i] = cabecera[2, i];
               
                gridDatos.Columns.Add(columna);

            }


            gridDatos.DataKeyNames = keys;
            CommandField buttonColumn = new CommandField();
            buttonColumn.ButtonType = ButtonType.Image;
            buttonColumn.SelectImageUrl = "~/Images/selectBusqueda.jpg";
            buttonColumn.ShowSelectButton = true;
            gridDatos.Columns.Add(buttonColumn);
            gridDatos.HorizontalAlign = HorizontalAlign.Center;
          
        }
        #endregion
        
        protected void gridDatos_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {

            Dictionary<string, string> reto =
          new Dictionary<string, string>();

            int ind = e.NewSelectedIndex;

            if (RowSelected != null)
                {
                //List<String> retorno = new List<string>(); //creo el array de retorno con los valores seleccionados 

                    for(int i = 0; i < gridDatos.DataKeyNames.Length  ; i++)
                    {

                        reto.Add(gridDatos.DataKeyNames.ElementAt(i), (gridDatos.DataKeys[e.NewSelectedIndex].Values[i]??"").ToString());
                        //retorno.Add(gridDatos.DataKeys[e.NewSelectedIndex].Values[i].ToString());

                    }
                RowSelected(reto);
                gridDatos.DataSource = null;
                gridDatos.Columns.Clear();

            }
           


                


        }

        protected void gridDatos_RowDataBound(object sender, GridViewRowEventArgs e)
        {

        }

        protected void gridDatos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {       
           
        }

        protected void btnClose_Click(object sender, EventArgs e)
        {
            gridDatos.DataSource = null;
            gridDatos.Columns.Clear();

        }

        
     


    }
}